package com.cml.getway.core.netty.processor.filter;

import com.cml.getway.core.context.Context;

/**
 * 姓名：陈茂林
 * 时间：2024/1/15
 * 描述：
 */
public abstract class AbstractLinkedProcessorFilter<T>  implements ProcessorFilter<Context>{
    protected AbstractLinkedProcessorFilter<T> next = null;
    public void fireNext(Context ctx, Object... args) throws Throwable {

        if(next != null) {
            if(!next.check(ctx)) {
                next.fireNext(ctx, args);
            } else {
                next.transformEntry(ctx, args);
            }
        } else {
            //	没有下一个节点了，已经到了链表的最后一个节点
            return;
        }
    }

    public void transformEntry(Context ctx, Object... args) throws Throwable {
        //	子类调用：这里就是真正执行下一个节点(元素)的操作
        entry(ctx, args);
    }

    public void setNext(AbstractLinkedProcessorFilter<T> next) {
        this.next = next;
    }

    public AbstractLinkedProcessorFilter<T> getNext() {
        return next;
    }

    public abstract void entry(Context ctx, Object... args) throws Throwable;

    public abstract boolean check(Context ctx) throws Throwable;
}
